package com.luxsoft.em2.replication.central.consumers;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Topic;

import org.apache.activemq.command.ActiveMQTopic;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.jms.core.MessagePostProcessor;
import org.springframework.util.Assert;

import com.luxsoft.siipap.service.ServiceLocator2;
import com.luxsoft.sw3.replica.EntityLog;
import com.luxsoft.utils.LoggerHelper;

/**
 * Importador de entidades que re envia un mensaje con la entidad persistida en las oficinas
 * a un topico del broker central (Oficinas)
 * 
 * @author Ruben Cancino 
 *
 */

public class RedirectToTopicConsumer  extends AbstractConsumer implements InitializingBean{
	
	Logger logger=LoggerHelper.getLogger();
	
	private String destino;
	
	@Override
	public void afterReplicate(final EntityLog log) {
		Topic topic=new ActiveMQTopic(getDestino());
		ServiceLocator2.getJmsTemplate().convertAndSend(topic, log,new MessagePostProcessor() {
			public Message postProcessMessage(Message message) throws JMSException {
				message.setStringProperty("SUCURSAL_ORIGEN", log.getSucursalOrigen());
				return message;
			}
		});
		logger.info("Entidad importada JMS Message enviada al topico : "+getDestino());
	}
	
	public void afterPropertiesSet() throws Exception {
		Assert.hasText(getDestino(),"Debe registrar un destino (Topic) para la modificacion de entidades");
		logger.info("Topico destino registrado: "+getDestino());
	}

	public String getDestino() {
		return destino;
	}

	public void setDestino(String destino) {
		this.destino = destino;
	}

	

}
